package org.jsola.hr.service.excel;

import com.alibaba.excel.context.AnalysisContext;
import lombok.extern.slf4j.Slf4j;
import org.jsola.common.BeanKit;
import org.jsola.common.DateKit8;
import org.jsola.exception.ParamException;
import org.jsola.hr.common.DateUtils;
import org.jsola.hr.dto.excel.EmpInfoImportDTO;
import org.jsola.hr.exception.HrException;
import org.jsola.hr.service.IEmpInfoService;
import org.jsola.hr.vo.EmpImportExcelVO;
import org.jsola.hr.vo.excel.ParseResultVO;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author zhr
 */
@Slf4j
@Deprecated
public class EmpInfoImportListener extends BaseAnalysisEventListener<EmpInfoImportDTO> {

    /**
     * 公司ID
     */
    protected String companyId;

    /**
     * 导入结果VO
     */
    protected EmpImportExcelVO empImportExcelVO;

    /**
     * 入库
     */
    @Override
    public void saveData() {
        log.info("{}条数据，开始存储数据库！", dataList.size());
        if (dataList.size() == 0) {
            log.warn("没有数据需要入库");
            return;
        }
        for (int i = 0; i < dataList.size(); i++) {
            EmpInfoImportDTO empInfoImportDTO = dataList.get(i);
            empInfoImportDTO.setRow(i);
            HrException.notNull(empInfoImportDTO.getName(), "员工姓名未填写,请检查表格");
            HrException.notNull(empInfoImportDTO.getPhone(), "手机号未填写,请检查表格");
            // 华杰只有姓名手机号必填
//            HrException.notNull(empInfoImportDTO.getPostType(), "工作性质未填写,请检查表格");
//            HrException.notNull(empInfoImportDTO.getJoinDate(), "员工入职时间未填写,请检查表格");
//            HrException.notNull(empInfoImportDTO.getTurnStraightDate(), "员工转正时间未填写,请检查表格");
//            HrException.notNull(empInfoImportDTO.getJoinCityName(), "员工入职城市未填写,请检查表格");
//            HrException.notNull(empInfoImportDTO.getJoinCityName().split("/").length == 3
//                    , "员工入职城市填写错误,请检查表格");
//            HrException.notNull(empInfoImportDTO.getFormalType(), "员工状态未填写,请检查表格");
        }
        HrException.notNull(tokenUser, "没有设置当前登录用户");
        IEmpInfoService empInfoService = BeanKit.getBean(IEmpInfoService.class);
//        successCount += empInfoService.batchSave(empInfoList,tokenUser).size();
        EmpImportExcelVO restEmpImportExcelVO = empInfoService.saveExcelDataList(dataList, false,tokenUser, companyId);
        if (!CollectionUtils.isEmpty(empImportExcelVO.getImportAllList())) {
            restEmpImportExcelVO.getImportAllList().addAll(empImportExcelVO.getImportAllList());
        }
        if (!CollectionUtils.isEmpty(empImportExcelVO.getImportFailList())) {
            restEmpImportExcelVO.getImportFailList().addAll(empImportExcelVO.getImportFailList());
        }
        if (!CollectionUtils.isEmpty(empImportExcelVO.getImportSucList())) {
            restEmpImportExcelVO.getImportSucList().addAll(empImportExcelVO.getImportSucList());
        }
        empImportExcelVO = restEmpImportExcelVO;
        log.info("存储数据库成功！");
    }

    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        // 验证EXCEL表头对应名称
        List<String> stringList = new ArrayList<>();
        stringList.add("员工姓名*");
        stringList.add("手机号*");
        stringList.add("工作性质");
        stringList.add("入职时间");
        stringList.add("转正时间");
        stringList.add("入职城市");
        stringList.add("员工状态");
        stringList.add("试用期天数");
        stringList.add("身份证号");
        stringList.add("出生日期");
        stringList.add("性别");
        stringList.add("民族");
        stringList.add("身份证地址");
        stringList.add("证件有效期");
        stringList.add("婚姻状况");
        stringList.add("参加工作时间");
        stringList.add("户口类型");
        stringList.add("现居住地址（详情）");
        stringList.add("政治面貌");
        stringList.add("户籍所在地");
        stringList.add("合同类型");
        stringList.add("合同开始时间");
        stringList.add("合同结束时间");
        stringList.add("合同期限");

        for (Map.Entry<Integer, String> entry : headMap.entrySet()) {
            if (!stringList.contains(entry.getValue())) {
                throw new ParamException("导入的员工信息模板不正确（请查看模板表头）");
            }
        }
    }

    @Override
    protected ParseResultVO<EmpInfoImportDTO> parse(EmpInfoImportDTO data, AnalysisContext context) {
        ParseResultVO<EmpInfoImportDTO> parseResultVO = super.parse(data, context);

        parseResultVO.setMsgList(new ArrayList<>());

        IEmpInfoService empInfoService = BeanKit.getBean(IEmpInfoService.class);

        parseResultVO.setSuccess(true);
        return parseResultVO;
    }

    public String getCompanyId() {
        return companyId;
    }

    public void setCompanyId(String companyId) {
        this.companyId = companyId;
    }

    public EmpImportExcelVO getEmpImportExcelVO() {
        return empImportExcelVO;
    }

    public void setEmpImportExcelVO(EmpImportExcelVO empImportExcelVO) {
        this.empImportExcelVO = empImportExcelVO;
    }
}
